package com.chuangdun.flutter.plugin.alarm

import android.util.Log
import java.text.ParseException
import java.text.SimpleDateFormat
import java.util.Calendar
import java.util.Locale

/**
 * 日期时间工具类，用于处理闹钟相关的日期解析和格式化。
 */
object DateUtils {
    private val DATE_FORMAT = SimpleDateFormat("yyyy-MM-dd", Locale.getDefault())
    private val DATE_TIME_FORMAT = SimpleDateFormat("yyyy-MM-dd HH:mm", Locale.getDefault())

    /**
     * 将字符串日期 ("yyyy-MM-dd") 解析为 Calendar 对象。
     * 时间部分将被设置为 00:00:00.000。
     *
     * @param dateStr 日期字符串，格式为 "yyyy-MM-dd"
     * @return 解析后的 Calendar 对象，如果解析失败则返回 null
     */
    @JvmStatic
    fun parseDate(dateStr: String): Calendar? {
        return try {
            val date = DATE_FORMAT.parse(dateStr)
            val calendar = Calendar.getInstance()
            calendar.time = date
            calendar.set(Calendar.HOUR_OF_DAY, 0)
            calendar.set(Calendar.MINUTE, 0)
            calendar.set(Calendar.SECOND, 0)
            calendar.set(Calendar.MILLISECOND, 0)
            calendar
        } catch (e: ParseException) {
            Log.e(TAG, "日期解析失败: $dateStr", e)
            null
        }
    }

    /**
     * 根据给定的日期字符串 ("yyyy-MM-dd") 和小时、分钟，构建一个完整的 Calendar 对象。
     *
     * @param dateStr 日期字符串，格式为 "yyyy-MM-dd"
     * @param hour 小时 (0-23)
     * @param minute 分钟 (0-59)
     * @return 构建后的 Calendar 对象，如果日期解析失败则返回 null
     */
    @JvmStatic
    fun buildDateTime(dateStr: String, hour: Int, minute: Int): Calendar? {
        val calendar = parseDate(dateStr) ?: return null
        calendar.set(Calendar.HOUR_OF_DAY, hour)
        calendar.set(Calendar.MINUTE, minute)
        calendar.set(Calendar.SECOND, 0)
        calendar.set(Calendar.MILLISECOND, 0)
        return calendar
    }

    /**
     * 格式化 Calendar 对象为 "yyyy-MM-dd HH:mm" 字符串。
     *
     * @param calendar Calendar 对象
     * @return 格式化后的日期时间字符串
     */
    @JvmStatic
    fun formatDateTime(calendar: Calendar): String {
        return DATE_TIME_FORMAT.format(calendar.time)
    }
}